/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package repository;

import beans.PessoaFisica;
import connection.ConnectionBD;
import interacesRepository.IRepositoryPessoaFisica;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author DanielC
 */
public class RepositoryPessoaFisica implements IRepositoryPessoaFisica {
    
    private static RepositoryPessoaFisica instancia;

    private RepositoryPessoaFisica() {
    }

    public static RepositoryPessoaFisica getInstancia() {
        if (instancia == null) {
            instancia = new RepositoryPessoaFisica();
        }
        return instancia;
    }
    

    public void inserir(PessoaFisica pessoaFisica) {
         try {

            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = new String();

            linhaSQL = ("INSERT INTO pessoafisica_tb (CPF, IDFORNECEDOR, NOME, EMAIL, SEXO, RG) "
                    + "VALUES ('"+ pessoaFisica.getCPF()+"','"+ pessoaFisica.getId()+"','"+
                    pessoaFisica.getNome()+"','"+pessoaFisica.getEmail()+"','"+pessoaFisica.getSexo()+"','"+
                    pessoaFisica.getRg()+ "')");

//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }
             System.out.println("Linha SQL "+ linhaSQL);
            stmt.execute(linhaSQL);

            } catch (SQLException ex) {
                Logger.getLogger(RepositoryPessoaFisica.class.getName()).log(Level.SEVERE, null, ex);
            }
        
    }

    public void excluir(PessoaFisica pessoaFisica) {
        try {
            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = ("delete from pessoafisica_tb where IDFORNECEDOR = '" + pessoaFisica.getId() + "'");
//            System.out.println("Consulta ==>>" + linhaSQL);
            
            
 //             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            } 
            ResultSet rs = stmt.executeQuery(linhaSQL);
        } catch (SQLException ex) {
            Logger.getLogger(RepositoryFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alterar(PessoaFisica pessoaFisica) {
        try {
            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = new String();
            linhaSQL = ("update pessoafisica_tb  set nome = '" + pessoaFisica.getNome()+
                    "', cpf = '"+pessoaFisica.getCPF()+ "', email = '"+pessoaFisica.getEmail()+
                    "', sexo = '"+ pessoaFisica.getSexo()+"', rg = '"+ pessoaFisica.getRg()+"' where IDFORNECEDOR = '"+ pessoaFisica.getId()+"'");
            
//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }
            
             stmt.execute(linhaSQL);
        } catch (SQLException ex) {
            Logger.getLogger(RepositoryPessoaFisica.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public PessoaFisica consultarPessoaFisicaID(Integer id) {
     PessoaFisica z = new PessoaFisica();

        try {
            String linhaSQL = new String("select CPF, IDFORNECEDOR, NOME, EMAIL, SEXO, RG "
                    + "from pessoafisica_tb pf "
                    + "where pf.IDFORNECEDOR = '" + id + "'");

            Statement stmt = ConnectionBD.getInstance().createStatement();
//            if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            };
            ResultSet rs = stmt.executeQuery(linhaSQL);

            while (rs.next()) {
                z.setCPF(rs.getObject(1).toString());
                z.setId((Integer.parseInt(rs.getObject(2).toString())));
                z.setNome(rs.getObject(3).toString());
                z.setEmail(rs.getObject(4).toString());
                z.setSexo(rs.getObject(5).toString());
                z.setRg(rs.getObject(6).toString());
            }

        } catch (SQLException ex) {
            Logger.getLogger(RepositoryFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return z;   
    }

    @Override
    public Collection consultarnome(String nome) {
        
     List c = new ArrayList();

        try {
            //+++++++++++++++++++++++++
             String linhaSQL = new String("select CPF, IDFORNECEDOR, NOME, EMAIL, SEXO, RG "
                    + "from pessoafisica_tb pf "
                    + "where pf.NOME = '" + nome + "'");
                     
            //+++++++++++++++++++
            
            Statement stmt = ConnectionBD.getInstance().createStatement();

//            if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }

            ResultSet rs = stmt.executeQuery(linhaSQL);

            //CPF, IDFORNECEDOR, NOME, EMAIL, SEXO, RG 
            while (rs.next()) {
                PessoaFisica z = new PessoaFisica();
                z.setCPF(rs.getObject(1).toString());
                z.setId( (Integer.parseInt(rs.getObject(2).toString())));

                z.setNome(rs.getObject(3).toString());
                z.setEmail(rs.getObject(4).toString());
                z.setSexo(rs.getObject(5).toString());
                z.setRg(rs.getObject(6).toString());

                c.add(z);
            }

        } catch (SQLException ex) {
            Logger.getLogger(RepositoryFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return c;
    }

    @Override
    public Collection consultartodos() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public int totalCadastrados() {
         Integer resultado = 0;
        try {
            String linhaSQL = new String("SELECT COUNT(*) FROM pessoafisica_tb");
            Statement stmt = ConnectionBD.getInstance().createStatement();
            ResultSet rs = stmt.executeQuery(linhaSQL);
            while (rs.next()) {
                resultado = Integer.parseInt(rs.getString(1).toString());
            }
            return resultado;
        } catch (SQLException ex) {
            Logger.getLogger(RepositoryFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultado;
    }
}
